#ifndef __MATERIA_PRIORIZADA_H__
#define __MATERIA_PRIORIZADA_H__

#include "InformacionMateria.h"
#include "InformacionMateriaSegunCarrera.h"

namespace modelo {

	class MateriaPriorizada
	{
	public:
		MateriaPriorizada(InformacionMateria* informacionMateria, 
			InformacionMateriaSegunCarrera* informacionMateriaSegunCarrera);
		~MateriaPriorizada(void);

		bool operator<(const MateriaPriorizada &otraMateria) const;	

		void DeseoCursarla() {this->deseoCursarla = true;}
		void IncrementarPrioridad(int prioridadAdicional);
		list<CatedraMateria*> ObtenerCatedrasHabilitadas();
		void SeleccionarCatedra(CatedraMateria* catedra); 

		/** Accesibilidad */
		InformacionMateria* GetInformacionMateria(){return informacionMateria;}
		InformacionMateriaSegunCarrera* GetInformacionMateriaSegunCarrera(){return informacionMateriaSegunCarrera;}
		bool EsObligatoria(){return esObligatoria;}
		int GetPrioridad(){return prioridad;}
		CatedraMateria* GetCatedraSeleccionada() {return catedraSeleccionada;}
		list<string> GetLog() {return log;}
		bool IsDeseoCursarla() {return deseoCursarla;}

		void SetInformacionMateria(InformacionMateria* otraInformacion) {informacionMateria = otraInformacion;}
		void SetInformacionMateriaSegunCarrera(InformacionMateriaSegunCarrera* otraInformacion) {informacionMateriaSegunCarrera = otraInformacion;}
		bool EsObligatoria(bool obl) {esObligatoria = obl;}

	private:
		CatedraMateria* catedraSeleccionada;
		InformacionMateria* informacionMateria;
		InformacionMateriaSegunCarrera* informacionMateriaSegunCarrera;
		list<string> log;
		int prioridad;
		bool esObligatoria;
		bool incluidoAlPlan;
		bool deseoCursarla;
	};
}
#endif
